Code coverage report for src/loader.js

Statements: 58.54% (48 / 82)      Branches: 23.33% (7 / 30)      Functions: 70.83% (17 / 24)      Lines: 58.75% (47 / 80)      Ignored: none     

All files » src/ » loader.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 1541     1   6   1 3 3     3     3       1   1   1     1   1 1 6   6     1 1     1 1     1 1     1       1                   1 3 3 3   3 3 3   3 3         1                                       1 2   2 2       1 2       2   2 1     1     1                                                       1     1        
System.register(['core-js', './template-registry-entry'], function (_export) {
  'use strict';
 
  var core, TemplateRegistryEntry, hasTemplateElement, Loader;
 
  function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  function importElements(frag, link, callback) {
    Eif (frag) {
      document.head.appendChild(frag);
    }
 
    Iif (window.Polymer && Polymer.whenReady) {
      Polymer.whenReady(callback);
    } else {
      link.addEventListener('load', callback);
    }
  }
 
  return {
    setters: [function (_coreJs) {
      core = _coreJs['default'];
    }, function (_templateRegistryEntry) {
      TemplateRegistryEntry = _templateRegistryEntry.TemplateRegistryEntry;
    }],
    execute: function () {
      hasTemplateElement = 'content' in document.createElement('template');
 
      Loader = (function () {
        function Loader() {
          _classCallCheck(this, Loader);
 
          this.templateRegistry = {};
        }
 
        Loader.prototype.loadModule = function loadModule(id) {
          throw new Error('Loaders must implement loadModule(id).');
        };
 
        Loader.prototype.loadAllModules = function loadAllModules(ids) {
          throw new Error('Loader must implement loadAllModules(ids).');
        };
 
        Loader.prototype.loadTemplate = function loadTemplate(url) {
          throw new Error('Loader must implement loadTemplate(url).');
        };
 
        Loader.prototype.loadText = function loadText(url) {
          throw new Error('Loader must implement loadText(url).');
        };
 
        Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(id) {
          var entry = this.templateRegistry[id];
 
          if (entry === undefined) {
            this.templateRegistry[id] = entry = new TemplateRegistryEntry(id);
          }
 
          return entry;
        };
 
        Loader.prototype.importDocument = function importDocument(url) {
          return new Promise(function (resolve, reject) {
            var frag = document.createDocumentFragment();
            var link = document.createElement('link');
 
            link.rel = 'import';
            link.href = url;
            frag.appendChild(link);
 
            importElements(frag, link, function () {
              return resolve(link['import']);
            });
          });
        };
 
        Loader.prototype.importBundle = function importBundle(link) {
          return new Promise(function (resolve, reject) {
            if (link['import']) {
              if (!hasTemplateElement) {
                HTMLTemplateElement.bootstrap(link['import']);
              }
 
              resolve(link['import']);
            } else {
              importElements(null, link, function () {
                if (!hasTemplateElement) {
                  HTMLTemplateElement.bootstrap(link['import']);
                }
 
                resolve(link['import']);
              });
            }
          });
        };
 
        Loader.prototype.importTemplate = function importTemplate(url) {
          var _this = this;
 
          return this.importDocument(url).then(function (doc) {
            return _this.findTemplate(doc, url);
          });
        };
 
        Loader.prototype.findTemplate = function findTemplate(doc, url) {
          Iif (!hasTemplateElement) {
            HTMLTemplateElement.bootstrap(doc);
          }
 
          var template = doc.getElementsByTagName('template')[0];
 
          if (!template) {
            throw new Error('There was no template element found in \'' + url + '\'.');
          }
 
          return template;
        };
 
        Loader.prototype.findBundledTemplate = function findBundledTemplate(name, entry) {
          var _this2 = this;
 
          if (this.bundle) {
            var found = this.bundle.getElementById(name);
            if (found) {
              entry.setTemplate(found);
              return Promise.resolve(true);
            }
          } else if (!this.bundleChecked) {
            this.bundleChecked = true;
 
            var bundleLink = document.querySelector('link[aurelia-view-bundle]');
            if (bundleLink) {
              return this.importBundle(bundleLink).then(function (doc) {
                _this2.bundle = doc;
                var found = _this2.bundle.getElementById(name);
                if (found) {
                  entry.setTemplate(found);
                  return Promise.resolve(true);
                }
              });
            }
          }
 
          return Promise.resolve(false);
        };
 
        return Loader;
      })();
 
      _export('Loader', Loader);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2xvYWRlci9zcmMvbG9hZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQ0FHSSxrQkFBa0IsRUFjVCxNQUFNOzs7O0FBWm5CLFdBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzVDLFFBQUcsSUFBSSxFQUFDO0FBQ04sY0FBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakM7O0FBRUQsUUFBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUM7QUFDckMsYUFBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3QixNQUFJO0FBQ0gsVUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN6QztHQUNGOzs7Ozs7cURBZE8scUJBQXFCOzs7QUFFekIsd0JBQWtCLEdBQUksU0FBUyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDOztBQWM1RCxZQUFNO0FBQ04saUJBREEsTUFBTSxHQUNKO2dDQURGLE1BQU07O0FBRWYsY0FBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztTQUM1Qjs7QUFIVSxjQUFNLFdBS2pCLFVBQVUsR0FBQSxvQkFBQyxFQUFFLEVBQUM7QUFDWixnQkFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzNEOztBQVBVLGNBQU0sV0FTakIsY0FBYyxHQUFBLHdCQUFDLEdBQUcsRUFBQztBQUNqQixnQkFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EOztBQVhVLGNBQU0sV0FhakIsWUFBWSxHQUFBLHNCQUFDLEdBQUcsRUFBQztBQUNmLGdCQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7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OUIsY0FBRyxJQUFJLENBQUMsTUFBTSxFQUFDO0FBQ2IsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLGdCQUFHLEtBQUssRUFBQztBQUNQLG1CQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLHFCQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDOUI7V0FDRixNQUFLLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFDO0FBQzNCLGdCQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7QUFFMUIsZ0JBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNyRSxnQkFBRyxVQUFVLEVBQUM7QUFDWixxQkFBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLEdBQUcsRUFBSTtBQUMvQyx1QkFBSyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLG9CQUFJLEtBQUssR0FBRyxPQUFLLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0Msb0JBQUcsS0FBSyxFQUFDO0FBQ1AsdUJBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIseUJBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDOUI7ZUFDRixDQUFDLENBQUM7YUFDSjtXQUNGOztBQUVELGlCQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7O2VBNUdVLE1BQU07Ozt3QkFBTixNQUFNIiwiZmlsZSI6Ii9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2xvYWRlci9zcmMvbG9hZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvcmUgZnJvbSAnY29yZS1qcyc7XG5pbXBvcnQge1RlbXBsYXRlUmVnaXN0cnlFbnRyeX0gZnJvbSAnLi90ZW1wbGF0ZS1yZWdpc3RyeS1lbnRyeSc7XG5cbnZhciBoYXNUZW1wbGF0ZUVsZW1lbnQgPSAoJ2NvbnRlbnQnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuXG5mdW5jdGlvbiBpbXBvcnRFbGVtZW50cyhmcmFnLCBsaW5rLCBjYWxsYmFjaykge1xuICBpZihmcmFnKXtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGZyYWcpO1xuICB9XG5cbiAgaWYod2luZG93LlBvbHltZXIgJiYgUG9seW1lci53aGVuUmVhZHkpe1xuICAgIFBvbHltZXIud2hlblJlYWR5KGNhbGxiYWNrKTtcbiAgfWVsc2V7XG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY2FsbGJhY2spO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcigpe1xuICAgIHRoaXMudGVtcGxhdGVSZWdpc3RyeSA9IHt9O1xuICB9XG5cbiAgbG9hZE1vZHVsZShpZCl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkZXJzIG11c3QgaW1wbGVtZW50IGxvYWRNb2R1bGUoaWQpLicpO1xuICB9XG5cbiAgbG9hZEFsbE1vZHVsZXMoaWRzKXtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlciBtdXN0IGltcGxlbWVudCBsb2FkQWxsTW9kdWxlcyhpZHMpLicpO1xuICB9XG5cbiAgbG9hZFRlbXBsYXRlKHVybCl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkZXIgbXVzdCBpbXBsZW1lbnQgbG9hZFRlbXBsYXRlKHVybCkuJyk7XG4gIH1cblxuICBsb2FkVGV4dCh1cmwpe1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVyIG11c3QgaW1wbGVtZW50IGxvYWRUZXh0KHVybCkuJyk7XG4gIH1cblxuICBnZXRPckNyZWF0ZVRlbXBsYXRlUmVnaXN0cnlFbnRyeShpZCl7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy50ZW1wbGF0ZVJlZ2lzdHJ5W2lkXTtcblxuICAgIGlmKGVudHJ5ID09PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy50ZW1wbGF0ZVJlZ2lzdHJ5W2lkXSA9IGVudHJ5ID0gbmV3IFRlbXBsYXRlUmVnaXN0cnlFbnRyeShpZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgaW1wb3J0RG9jdW1lbnQodXJsKXtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcblxuICAgICAgbGluay5yZWwgPSAnaW1wb3J0JztcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobGluayk7XG5cbiAgICAgIGltcG9ydEVsZW1lbnRzKGZyYWcsIGxpbmssICgpID0+IHJlc29sdmUobGluay5pbXBvcnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGltcG9ydEJ1bmRsZShsaW5rKXtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYobGluay5pbXBvcnQpe1xuICAgICAgICBpZighaGFzVGVtcGxhdGVFbGVtZW50KXtcbiAgICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcChsaW5rLmltcG9ydCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGxpbmsuaW1wb3J0KTtcbiAgICAgIH1lbHNle1xuICAgICAgICBpbXBvcnRFbGVtZW50cyhudWxsLCBsaW5rLCAoKSA9PiB7XG4gICAgICAgICAgaWYoIWhhc1RlbXBsYXRlRWxlbWVudCl7XG4gICAgICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcChsaW5rLmltcG9ydCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZShsaW5rLmltcG9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0VGVtcGxhdGUodXJsKXtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnREb2N1bWVudCh1cmwpLnRoZW4oZG9jID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRUZW1wbGF0ZShkb2MsIHVybCk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVtcGxhdGUoZG9jLCB1cmwpe1xuICAgIGlmKCFoYXNUZW1wbGF0ZUVsZW1lbnQpe1xuICAgICAgSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAoZG9jKTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RlbXBsYXRlJylbMF07XG5cbiAgICBpZighdGVtcGxhdGUpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSB3YXMgbm8gdGVtcGxhdGUgZWxlbWVudCBmb3VuZCBpbiAnJHt1cmx9Jy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmaW5kQnVuZGxlZFRlbXBsYXRlKG5hbWUsIGVudHJ5KXtcbiAgICBpZih0aGlzLmJ1bmRsZSl7XG4gICAgICB2YXIgZm91bmQgPSB0aGlzLmJ1bmRsZS5nZXRFbGVtZW50QnlJZChuYW1lKTtcbiAgICAgIGlmKGZvdW5kKXtcbiAgICAgICAgZW50cnkuc2V0VGVtcGxhdGUoZm91bmQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKCF0aGlzLmJ1bmRsZUNoZWNrZWQpe1xuICAgICAgdGhpcy5idW5kbGVDaGVja2VkID0gdHJ1ZTtcblxuICAgICAgdmFyIGJ1bmRsZUxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW2F1cmVsaWEtdmlldy1idW5kbGVdJyk7XG4gICAgICBpZihidW5kbGVMaW5rKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0QnVuZGxlKGJ1bmRsZUxpbmspLnRoZW4oZG9jID0+IHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZSA9IGRvYztcbiAgICAgICAgICB2YXIgZm91bmQgPSB0aGlzLmJ1bmRsZS5nZXRFbGVtZW50QnlJZChuYW1lKTtcbiAgICAgICAgICBpZihmb3VuZCl7XG4gICAgICAgICAgICBlbnRyeS5zZXRUZW1wbGF0ZShmb3VuZCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH1cbn1cbiJdfQ==